import { DmgTypeKey, FormulaDmgResultType, UnitAttr } from "../../types/L_Type";
import UnitX from "../../entity/UnitX";
import DmgFormula from "../dmgabout/DmgFormula";
import DmgExec_RC from "../dmgabout/DmgExec_RC";


/** 攻击特效的抽象接口  所有攻击特效必须实现以下抽象方法 */
export default abstract class AdditDmgBase{
 
    /**
     * 执行特效
     * @param aux 攻击单位
     * @param bux 被伤害单位
     * @param dmgv 伤害基础值+物理魔法加成后的伤害
     * @param dmgTypeKey 最终伤害类型
     * @param extraDmgAttr 特效配置的基础攻击属性参数对象
     * @param exclusiveAttr 特效配置的额外属性参数对象
     */
    public abstract execEffect(aux:UnitX,bux:UnitX,dmgv:number,dmgTypeKey:DmgTypeKey,extraDmgAttr?:UnitAttr,exclusiveAttr?:object):void;


    /**
     * 调用伤害函数 父级共通方法 子类非特殊情况不需要重写
     * @param aux 
     * @param bux 
     * @param dmgv 
     * @param dmgTypeKey 
     * @param extraDmgAttr 
     */
    protected execDmg(aux:UnitX,bux:UnitX,dmgv:number,dmgTypeKey:DmgTypeKey,extraDmgAttr?:UnitAttr){
        let dmgExecRs:FormulaDmgResultType=DmgFormula.stsUnitXDmgVal(aux,bux,dmgv,dmgTypeKey,extraDmgAttr?{attrs:extraDmgAttr}:extraDmgAttr)
        DmgExec_RC.execDmg(aux,bux,false,true,dmgTypeKey,dmgExecRs)
        
    }
 

}  